package com.CodeBlock代码块;

public class 重点02 { //韩顺平388集
    /**本质上先去调用父类的构造方法；再执行本类的普通代码块；最后执行本类的构造方法；*/
//    public BBBB() {
//        //super();隐藏了父类AAAA的构造方法super();
//        //隐藏了普通代码块，调用本类的普通代码块；
//        System.out.println("BBBB的构造方法被调用");
//    }
    public static void main(String[] args) {
        new BBBB();
        /**
         * （1）"AAAA的普通代码块被调用"
         * （2）AAAA的构造方法被调用
         * （3）BBBB的普通代码块被调用
         * （4）BBBB的构造方法被调用
         *
         *
         * 1.先找到BBBB的构造方法：
         * public BBBB() {
         *         //super();
         *         //隐藏了普通代码块，
         *         System.out.println("BBBB的构造方法被调用");
         *     }
         *     隐藏了父类AAAA的构造方法super();
         *    2. 调用父类AAAA的构造器
         *     public AAAA() {
         *         //super();隐藏了父类Object的构造方法super();
         *         //隐藏了普通代码块，调用本类的普通代码块；
         *         System.out.println("AAAA的构造方法被调用");
         *     }
         *     AAAA的父类是Object，不会输出；
         *    3. 再调用AAAA的普通代码块；
         *    再 输出"AAAA的构造代码块被调用"
         *    4. 返回到BBBB的构造方法；
         *      再调用BBBB的普通代码块；
         *      再 输出"BBBB的构造代码块被调用"
         *
         */
    }
}

class AAAA{
    {
        System.out.println("AAAA的普通代码块被调用");
    }
    public AAAA() {
        //super();隐藏了父类Object的构造方法super();
        //隐藏了普通代码块，调用本类的普通代码块；
        System.out.println("AAAA的构造方法被调用");
    }

}

class BBBB extends AAAA{
    {
        System.out.println("BBBB的普通代码块被调用");
    }
    public BBBB() {
        //super();隐藏了父类AAAA的构造方法super();
        //隐藏了普通代码块，调用本类的普通代码块；
        System.out.println("BBBB的构造方法被调用");
    }





///////////////////////////////////////////////////////////////////////


}
